Spring Boot 3.3 正式发布,王炸级更新,应用启动实现质的飞跃
Spring Boot 3.3 正式发布,王炸级更新,应用启动实现质的飞跃
最低环境要求:
不同 Spring Boot 版本对 Java 版本、Spring 框架版本、Maven 版本和 Gradle 版本都有特定要求。例如,Spring Boot 3.3.0 要求 Java 17 及以上,Spring 6.1.8+,Maven 3.6.3+,Gradle 7.5+或 8.x。
代码示例:以下是一个使用 Java 17 特性的简单示例,如文本块:
public class Java17TextBlocksExample {
public static void main(String[] args) {
String str = """
This is a multiline
string using Java 17 text blocks.
""";
System.out.println(str);
}
}
CDS 支持:
CDS(类数据共享)是一种强大的技术,通过在多个 JVM 之间共享预加载的类数据,显著减少了内存占用和应用的启动时间。在高并发的场景下,由于类数据无需在每个 JVM 实例中重复加载,大大提升了系统的整体性能和响应速度。
当应用启动时,CDS 会首先识别并准备好需要共享的类数据。这些类通常是应用中频繁使用且相对稳定的核心类。
性能提升方面,假设在没有 CDS 的情况下,每次启动一个新的 JVM 实例都需要花费 X 毫秒来加载关键类。而有了 CDS 支持,这个加载时间可能会降低到原来的几分之一,比如仅需 0.5X 毫秒甚至更少。
内存方面,原本每个 JVM 可能需要为这些类分配 Y 字节的内存空间,而 CDS 使得多个 JVM 可以共享这部分内存,从而大幅降低了总体内存消耗。
代码示例:创建共享类归档的代码可能如下:
import java.io.IOException;
public class CDSExample {
public static void main(String[] args) {
try {
// 执行生成共享类归档的命令
Process process = Runtime.getRuntime().exec("java -Djarmode=tools -jar test-app.jar extract --destination application");
// 处理命令执行的输出和错误
int exitCode = process.waitFor();
if (exitCode!= 0) {
System.err.println("Command execution failed with exit code: " + exitCode);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
此外,还可以使用以下命令来进一步优化 CDS 相关操作:
"java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar test-app.jar"
使用说明:
"-XX:ArchiveClassesAtExit=application.jsa":指定在 JVM 退出时创建一个包含类归档的文件,文件名是 "application.jsa"。
"-Dspring.context.exit=onRefresh":设置 Spring 上下文的退出行为。
Websockets 支持虚拟线程:
虚拟线程是轻量级的用户模式线程实现,能大幅提高硬件利用率和吞吐量。
代码示例:启用虚拟线程的配置如下:
spring.threads.virtual.enabled = true
import java.util.concurrent.ExecutionException;
public class VirtualThreadExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 模拟耗时任务
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(5000);
System.out.println("Task completed in virtual thread");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
future.get();
}
}
配置文件支持 Base64:
可以在 property 和 YAML 配置文件中以
base64:
前缀加载资源为 Base64 格式的值。代码示例:
spring:
ssl:
bundle:
pem:
mybundle:
keystore:
certificate: "base64:VGhpcyBpcyBhIHN0cmluZw=="
private-key: "base64:VGhpcyBpcyBhIHN0cmluZw=="
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Base64ConfigExample {
public static void main(String[] args) {
SpringApplication.run(Base64ConfigExample.class, args);
}
}
支持 SBOMs:
新增 SBOM 端点,提供软件组件的详细清单。
代码示例:使用相关 API 获取 SBOM 信息。
import org.springframework.web.client.RestTemplate;
public class SBOMEndpointExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String sbomInfo = restTemplate.getForObject("http://your-app/sbom-endpoint", String.class);
System.out.println(sbomInfo);
}
}
可观察性增强:
新增对 Micrometer 的 @SpanTag 注解的支持等。
代码示例:
import io.micrometer.observation.annotation.SpanTag;
public class ObservationExample {
@SpanTag(key = "operation", value = "myOperation")
public void myMethod() {
// 方法逻辑
System.out.println("Executing myMethod");
}
public static void main(String[] args) {
ObservationExample example = new ObservationExample();
example.myMethod();
}
}
Spring Security 增强:
自动配置 JwtAuthenticationConverter。
代码示例:
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@EnableWebSecurity
public class SecurityConfig {
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// 配置相关安全规则
return http.build();
}
}
服务连接支持增强:
对 Apache ActiveMQ Artemis 和 LDAP 服务连接的优化。
代码示例:配置连接参数。
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
public class ActiveMQArtemisConnectionExample {
public static void main(String[] args) {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 后续进行连接和操作
}
}
容器镜像增强:
对 Docker Compose 中 Bitnami 容器镜像的支持。
代码示例:在 Docker Compose 文件中配置相关镜像。
version: '3'
services:
my-service:
image: bitnami/your-image:latest
# 其他配置
依赖更新和废除:
众多库的版本更新,如 Spring 库和第三方类库。
代码示例:在项目的依赖管理中更新版本号。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.3.0</version>
</dependency>
<!-- 其他依赖 -->
</dependencies>
总结:
Spring Boot 3.3.0 引入了一系列令人瞩目的新特性,涵盖了从环境要求到各种功能的增强。这些新特性不仅提升了开发效率,还优化了应用的性能、安全性和可维护性。通过深入了解和合理运用这些新特性,开发者能够构建更强大、高效和可靠的应用程序。